﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Toto.Estado;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;
using Toto.Componentes;

namespace Toto.Telas
{
    class OptionsScene : GameScreen
    {
        SpriteFont fonte;
        enum Estado { Principal, Formacao, Teclas };
        Estado estado;
        int menu = 1;
        String op1, op2, op3, op4;
        List<Color> cor { get; set; }


        #region [ Constructor ]
        /// <summary>
        /// Construtor da tela de Opções
        /// </summary>
        /// <param name="game"></param>
        public OptionsScene(Game1 game)
            : base(game)
        {
            estado = Estado.Principal;
            // Carrega a imagem de fundo
            this.background = Textura.telaOpcoes;
            fonte = GameFont.opcoes;
            //Seta texto da Opções
            op1 = "3 - 4 - 3";
            op2 = "4 - 4 - 2";
            op3 = "3 - 5 - 2";
            op4 = "5 - 3 - 2";
            cor = new List<Color>(5);
            cor.Add(Color.Black);
            cor.Add(Color.Black);
            cor.Add(Color.Black);
            cor.Add(Color.Black);
            cor.Add(Color.Black);
            cor.Add(Color.Black);


        }

        #endregion

        #region [ Update & Draw ]

        /// <summary>
        /// Atualiza a tela de Opções
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Update(GameTime gameTime)
        {

            keyState = Keyboard.GetState();

            switch (estado)
            {

                case Estado.Formacao:
                    //Controle do menu de seleção de formações
                    #region [Opção Formação]
                    if ((keyState.IsKeyDown(Keys.Enter) && oldKeyState.IsKeyUp(Keys.Enter)))
                    {
                        switch (menu)
                        {
                            case 1:

                                Formacao.formacaoNumber = menu;

                                break;
                            case 2:
                                Formacao.formacaoNumber = menu;
                                break;
                            case 3:
                                Formacao.formacaoNumber = menu;
                                break;
                            case 4:
                                Formacao.formacaoNumber = menu;
                                break;
                            case 5:
                                estado = Estado.Principal;
                                break;
                        }
                    }


                    switch (Formacao.formacaoNumber)
                    {
                        case 1:
                            if ((menu != Formacao.formacaoNumber) && (menu != 5))
                            {
                                cor[Formacao.formacaoNumber] = Color.Red;
                            }
                            break;
                        case 2:
                            if ((menu != Formacao.formacaoNumber) && (menu != 5))
                            {
                                cor[Formacao.formacaoNumber] = Color.Red;
                            }
                            break;
                        case 3:
                            if ((menu != Formacao.formacaoNumber) && (menu != 5))
                            {
                                cor[Formacao.formacaoNumber] = Color.Red;
                            }
                            break;
                        case 4:
                            if ((menu != Formacao.formacaoNumber) && (menu != 5))
                            {
                                cor[Formacao.formacaoNumber] = Color.Red;
                            }
                            break;
                        default:
                            {
                                cor[Formacao.formacaoNumber] = Color.Red;

                            }

                            break;
                    }






                    if ((keyState.IsKeyDown(Keys.Up) && oldKeyState.IsKeyUp(Keys.Up)))
                    {

                        menu--;

                    }
                    //Navegação do Menu
                    else if ((keyState.IsKeyDown(Keys.Down) && oldKeyState.IsKeyUp(Keys.Down)))
                    {


                        menu++;
                    }
                    if (menu == 6) { menu = 5; }
                    if (menu == 0) { menu = 1; }





                    switch (menu)
                    {
                        case 1:
                            cor[menu] = Color.White;

                            break;
                        case 2:
                            cor[menu] = Color.White;
                            break;
                        case 3:
                            cor[menu] = Color.White;
                            break;
                        case 4:
                            cor[menu] = Color.White;
                            break;
                        case 5:
                            cor[menu] = Color.White;
                            if (Formacao.formacaoNumber == 4)
                            {
                                cor[Formacao.formacaoNumber] = Color.Red;
                            }
                            break;
                    }



                    if ((keyState.IsKeyDown(Keys.Escape) && oldKeyState.IsKeyUp(Keys.Escape)))
                    {

                        estado = Estado.Principal;

                    }

                    for (int i = 1; i < 6; i++)
                    {
                        if ((i != menu) && (i != Formacao.formacaoNumber))
                        {
                            cor[i] = Color.Black;
                        }

                    }
                    #endregion
                    break;

                case Estado.Principal:
                    #region [ Estado Principal de Opçoes ]


                    if ((keyState.IsKeyDown(Keys.Enter) && oldKeyState.IsKeyUp(Keys.Enter)))
                    {

                        estado = Estado.Formacao;

                    }

                    if ((keyState.IsKeyDown(Keys.Escape) && oldKeyState.IsKeyUp(Keys.Escape)))
                        foreach (ScreenManager sm in game.Components)
                            if (sm is ScreenManager)
                                sm.ChangeScreen(GameState.Menu);

                    #endregion
                    break;
            }


            oldKeyState = keyState;

            base.Update(gameTime);


        }

        /// <summary>
        /// Desenha a tela de Options
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Draw(GameTime gameTime)
        {






            switch (estado)
            {

                case Estado.Formacao:

                    // Desenha o fundo da tela
                    spriteBatch.Draw(background, Vector2.Zero, Color.White);
                    spriteBatch.DrawString(fonte, "Choose a training", new Vector2(100, 50), Color.Sienna);
                    spriteBatch.DrawString(fonte, op1, new Vector2(100, 100), cor[1]);
                    spriteBatch.DrawString(fonte, op2, new Vector2(100, 140), cor[2]);
                    spriteBatch.DrawString(fonte, op3, new Vector2(100, 180), cor[3]);
                    spriteBatch.DrawString(fonte, op4, new Vector2(100, 220), cor[4]);
                    spriteBatch.DrawString(fonte, "Exit", new Vector2(100, 270), cor[5]);
                    break;


                case Estado.Principal:

                    // Desenha o fundo da tela
                    spriteBatch.Draw(background, Vector2.Zero, Color.White);
                    spriteBatch.DrawString(fonte, "Options Game", new Vector2(100, 50), Color.Sienna);
                    spriteBatch.DrawString(fonte, "Tactical Formations", new Vector2(100, 100), Color.Black);
                    //spriteBatch.DrawString(fonte, op2, new Vector2(100, 140), cor[2]);

                    break;
            }
            base.Draw(gameTime);

        }
        #endregion


    }
}
